/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [CalculatorButton.java]
 * Creation Date        [10-Jul-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_02_gui.calculator_v2.ui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.InputEvent;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.KeyStroke;

/**
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class CalculatorButton extends JButton {

	private static final long serialVersionUID = -4329017429064359973L;

	/**
	 * 构造一个具有缺省事件, 指定文本, 指定快捷键的JButton
	 * 
	 * @param listener
	 *            Action事件
	 * @param text
	 *            按钮上的文本
	 * @param key
	 *            快捷键, 键值
	 * @param isCtrl
	 *            是否键入Ctrl
	 */
	public CalculatorButton(Action listener, String text, int key,
			boolean isCtrl) {
		addActionListener(listener);
		if (isCtrl)
			getInputMap(WHEN_IN_FOCUSED_WINDOW).put(
					KeyStroke.getKeyStroke(key, InputEvent.CTRL_DOWN_MASK),
					text);
		else
			getInputMap(WHEN_IN_FOCUSED_WINDOW).put(
					KeyStroke.getKeyStroke(key, 0), text);
		getActionMap().put(text, listener);

		setPreferredSize(new Dimension(35, 26));
		setForeground(Color.BLUE);

		setText(text);
		setFont(new Font("Tahoma", Font.PLAIN, 12));
		setMargin(new Insets(0, 0, 0, 0));
	}

	/**
	 * 构造一个具有缺省事件, 指定文本, 指定快捷键, 指定文本颜色的JButton
	 * 
	 * @param listener
	 *            Action事件
	 * @param text
	 *            按钮上的文本
	 * @param key
	 *            快捷键, 键值
	 * @param isCtrl
	 *            是否键入Ctrl
	 * @param color
	 *            文本的颜色
	 */
	public CalculatorButton(Action listener, String text, int key,
			boolean isCtrl, Color color) {
		this(listener, text, key, isCtrl);
		setForeground(color);
	}

	/**
	 * 构造一个具有缺省事件, 指定文本, 指定快捷键, 指定文本颜色的JButton
	 * 
	 * @param listener
	 *            Action事件
	 * @param text
	 *            按钮上的文本
	 * @param key
	 *            快捷键, 键值
	 * @param isCtrl
	 *            是否键入Ctrl
	 * @param color
	 *            文本的颜色
	 * @param width
	 *            按钮的宽度
	 * @param height
	 *            按钮的高度
	 */
	public CalculatorButton(Action listener, String text, int key,
			boolean isCtrl, Color color, int width, int height) {
		this(listener, text, key, isCtrl, color);
		setSize(width, height);
		setPreferredSize(new Dimension(width, height));
	}

	/**
	 * 绘制边界
	 * 
	 * @param g
	 *            画笔
	 */
	@Override
	protected void paintBorder(Graphics g) {
		super.paintBorder(g);
		Color c = g.getColor();
		g.setColor(getBackground());
		g.translate(0, 0);
		g.drawRoundRect(0, 0, getWidth(), getHeight(), 10, 10);
		g.setColor(c);
	}

}
